"""
相关配置信息：
1.数据库配置
2.redis配置
3.session配置
4.csrf配置
"""
import random

from flask import current_app

from news_info_app.models import User

"""
    flask_migrate使用之常用命令：控制台切换运行
    1. 初始化一个环境：python manage.py db init(执行一次)
    2. 自动检测模型，生成迁移脚本：python manage.py db migrate
    3. 将迁移脚本映射到数据库中：python manage.py db upgrade
    4. 更多命令：python manage.py db --help
    注意：当修改数据库字段时，反复运行2，3步骤
        main()里面一定要写manager.run()
"""
from news_info_app import create_app, db, models
from flask_script import Manager
from flask_migrate import MigrateCommand, Migrate
import datetime
from datetime import timedelta

# 选择开发模式
app = create_app('develop')
# 创建manager管理app
manager = Manager(app)
# 使用migrate关联db ,app
Migrate(db=db, app=app)
# 给manager添加一条操作命令
manager.add_command('db', MigrateCommand)


# 创建管理员账户
def create_superuser(name, password, mobile):
    # 创建用户
    user = User()
    # 设置用户属性
    user.nick_name = name
    user.password = password
    user.mobile = mobile
    user.is_admin = True
    try:
        db.session.add(user)
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        return '创建管理员失败'
    return '创建成功'


# 生成测试数据
def create_test_user():
    a = '张王李赵吴今天是外婆生日我换上复古系中穿着拉风的车素眉勾勒秋千话天青色等烟雨而我在等你'
    user_list = []
    for i in range(1,2001):
        nick_name = ''.join(random.choices(a, k=3))+'%s'%i
        password_hash = '$769840b0225990547023e1176e150f20114822e39d086124fca89d77bc0ec627'
        mobile = '1' + random.choice('35789') + '%9d' % random.randint(0, 999999999)
        # 创建距离现在时间30天的任意时间点
        last_login = datetime.datetime.now() - timedelta(seconds=random.randint(0, 30 * 24 * 60 * 60))
        user = User()
        user.nick_name = nick_name
        user.password_hash = password_hash
        user.mobile = mobile
        user.last_login = last_login
        user_list.append(user)
    try:
        db.session.add_all(user_list)
        db.session.commit()
        return '创建测试用户成功'
    except Exception as e:
        current_app.logger.error(e)
        return '创建测试用户失败'


if __name__ == '__main__':
    # app.run()
    manager.run()
